import { MessageTypeEnum } from '@/enums/messageTypeEnum';
import { MessageLevelEnum } from '@/enums/messageLevelEnum';
import { MessageSendWayEnum } from '@/enums/messageSendWayEnum';

/** 输入DTO：消息 */
export interface MessageInputDto {
  /** 编号 */
  Id: string | bigint;

  /** 基本对象类型 */
  BaseType?: string | null;
  /** 基本对象编号 */
  BaseId?: string | null;
  /** 方法名 */
  Method?: string | null;
  /** 消息图标 */
  Icon?: string | null;
  /** 消息类型 */
  MessageType: MessageTypeEnum;
  /** 消息级别 */
  MessageLevel: MessageLevelEnum;
  /** 标题 */
  Title?: string | null;
  /** 内容 */
  Content?: string | null;
  /** 数据体 */
  Payload: any;

  /** 发送时间 */
  SendTime: Date;

  /** 存储天数(0-365,0表示永久存储) */
  StorageDays: number;

  /** 发送方式集合 */
  SendWays: MessageSendWayEnum[];
  /** 发送至用户集合 */
  ToUsers: string[];
  /** 发送至组织机构集合 */
  ToOrganizations: string[];
  /** 发送至角色集合 */
  ToRoles: string[];
}

/** 输出DTO：消息 */
export interface MessageOutputDto extends MessageInputDto {
  /** 系统消息 */
  IsSystem: boolean;
  /** 发送者编号 */
  SenderId?: string | bigint | null;
  /** 发送者名称 */
  SenderName?: string | null;
  /** 发送者昵称 */
  SenderNickname?: string | null;
  /** 是否已发送 */
  IsSent: boolean;

  /** 创建时间 */
  CreatedTime: Date;
}

/** 输出DTO：消息接收者 */
export interface MessageReceiverOutputDto {
  /** 编号 */
  Id: string | bigint;

  /** 消息编号 */
  MessageId: string | bigint;
  /** 接收者编号 */
  ReceiverId: string | bigint;
  /** 接收者名称 */
  ReceiverName?: string | null;
  /** 接收者昵称 */
  ReceiverNickname?: string | null;
  /** 发送方式集合 */
  SendWays: MessageSendWayEnum[];
  /** 阅读时间 */
  LastReadTime?: Date | null;
  /** 阅读方式 */
  LastReadWay?: MessageSendWayEnum | null;

  /** 创建时间 */
  CreatedTime: Date;

  /** 是否已读 */
  IsRead: boolean;
}
